﻿using clasesBase;
using Logica;
using System.Collections.Generic;
using System.Windows.Forms;
using accesoDatos;
using System;

namespace PlanificacionProduccion
{
    public partial class FrmCaractLoteBusq : FrmBusquedas
    {
        ManejadorAyudas ayuda = new ManejadorAyudas();

        string[] columnasMostrar = new string[] { "Id", "Nombre", "Cantidad Estimada", "Unidad Medida" };
        string tablaBDconsulta = CaracteristicaLote.tablaBD;
        string nombreColID = "id";
        
        private int idProducto = 0;
        public int IdProducto
        {
            set { this.idProducto = value; }
        }

        public FrmCaractLoteBusq()
        {
            InitializeComponent();
        }

        private void btnTodos_Click_1(object sender, System.EventArgs e)
        {
            base.btnTodos_Click(sender, e);
        }

        private void form_Load(object sender, System.EventArgs e)
        {
            base.PermitirExportar = Program.PermitirExportar;
            base.establecerValoresFormulario(this.tablaBDconsulta, this.nombreColID, this.columnasMostrar);
            base.obtenerDatosGenerico = false;

            obtenerDatosCompletos();

            if (this.idProducto != 0)
            {
                Producto prod = new Producto(idProducto);
                txtIdProducto.Text = prod.ID.ToString();
                txtProducto.Text = prod.Nombre.Trim();
                txtProducto.Enabled = false;

                base.columnasFiltro = new string[] { "idProducto" };
                base.valoresFiltro = new string[] { "E" + this.idProducto.ToString() };
            }
        }

        protected void obtenerDatosCompletos()
        {
            datos.DataSource = CaracteristicaLote.listaExtendida(new string[] { }, new string[] { });
        }

        private void btnBuscar_Click(object sender, System.EventArgs e)
        {
            // Creo las listas que contendrán los filtros variables
            List<string> colColumnas = new List<string>(), colValores = new List<string>();
            List<char> colTiposDatos = new List<char>();

            // Obtengo los filtros ingresados por el usuario
            string id = txtId.Text.Trim(), nombre = txtNombre.Text.Trim();
            int idProducto = txtIdProducto.Text.Trim() == "" ? 0 : Convert.ToInt32(txtIdProducto.Text.Trim());

            if (id != "")
            {
                colColumnas.Add("id");
                colValores.Add(id);
                colTiposDatos.Add(TipoDatoColumna.NUMERICO);
            }

            if (nombre != "")
            {
                colColumnas.Add("nombre");
                colValores.Add(nombre);
                colTiposDatos.Add(TipoDatoColumna.CADENA);
            }

            if (idProducto!=0)
            {
                colColumnas.Add("idProducto");
                colValores.Add(idProducto.ToString());
                colTiposDatos.Add(TipoDatoColumna.NUMERICO);
            }

            // Establezco los arreglos para el filtrado, de acuerdo a lo obtenido
            columnasFiltro = colColumnas.ToArray();
            valoresFiltro = colValores.ToArray();
            tiposDeDatos = colTiposDatos.ToArray();

            // Llamo al método padre, encargado de realizar los filtros
            base.btnFiltros_Click(sender, e);
        }

        protected override void grilla_DoubleClick(object sender, System.EventArgs e)
        {
            if (grilla.Rows.Count > 0) this.btnABM_Click(null, e);
        }

        private void btnABM_Click(object sender, System.EventArgs e)
        {
            bool soloVisualizar = false;
            if (sender == null) soloVisualizar = true;
            base.abrirFormDetalle<FrmCaractLoteDet>(sender, soloVisualizar);

            obtenerDatosCompletos();
        }

        private void btnBorrar_Click(object sender, System.EventArgs e)
        {
            if (Notificador.accionBorrarConfirmada())
            {
                int idElemento = base.obtenerIdSeleccionado();
                if (idElemento != 0)
                {
                    CaracteristicaLote elem = new CaracteristicaLote();
                    elem.ID = idElemento;

                    string error = elem.borrarElemento();
                    Notificador.resultadoABM(TipoOperacionABM.BAJA, error);
                    if (error.Trim() == "") obtenerDatosCompletos();
                }
            }
        }

        void txtProducto_LostFocus(object sender, System.EventArgs e)
        {
            ayudaProductos(false);
        }

        private void ayudaProductos(bool todos)
        {
            if (!todos)
            {
                int id = txtIdProducto.Text.Trim() == "" ? 0 : Convert.ToInt32(txtIdProducto.Text);
                string producto = txtProducto.Text.Trim();

                ayuda.mostrarElementos(Producto.tablaBD, id, producto, true);
            }
            else ayuda.mostrarElementos(Producto.tablaBD);

            txtIdProducto.Text = ayuda.IdSeleccionado.ToString();
            txtProducto.Text = ayuda.NombreSeleccionado.Trim();
        }

        private void txtId_KeyPress(object sender, KeyPressEventArgs e)
        {
            Validador.soloEnteros_KeyPress(sender, e);
        }

        private void btnTodosProductos_Click(object sender, EventArgs e)
        {
            ayudaProductos(true);
        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {
        }
    }
}
